Cheat II v. 3.0 is Copyright © Adam Miller & Pelle Johansson 1996
Cheat II may be distributed freely, but may not be distributed for profit without my express written consent
version 3.0 by Pelle Johansson
help window © James W. Walker 1991
icon by Brian Heist, artist, and stud extraodinaire

Cheat II is $5 shareware for those between 18 and 65, free otherwise

See the Website, where you can share cheats with the big wide world!  http://zoo.cs.yale.edu:8000/~miller/comp/cheat.html

What Cheat II Does

The idea in Cheat II is to let you cheat freely in any Macintosh game.  Whether you want to change your lives, your points, your money, your level, or any other numerical aspect of a game, Cheat II will almost always give you the power to do this.  With Cheat II you can do things like get the high score, finish that game you could never be bothered to work your way through, visit levels you've never reached, outfit your ship with every possible enhancement, and so on.

Cheat II has worked on over 90% of the games I've tried.

Quick Disclaimer

Cheat II does things that can potentially crash a game or a machine, especially if incorrectly used.  I advise saving all open documents before using Cheat II, and I in no way take any responsibility for damaged incurred through the use of Cheat II.

Quick Start

Cheat II is in truth very easy to use.  Once you've gone through the following process once or twice it will become second nature to you.

Let's say you want to change your score in everybody's favorite game, Crazy Space Artichokes.  You load up the game, play for a minute and then pause the game.  You note that your score at this point is 500 points.  Go to the finder and open up Cheat II.  In Cheat II, you will see a list of open applications on the bottom right in a list.  Select Crazy Space Artichokes from this list by clicking on it:

Now, go to the Search For box and type in 500, which is how many points you had when you paused the game:

Then you hit the search button:

  or press the enter key(the return key won't work though)

Cheat II thinks for a second, and then a couple numbers appear.  The one you care about is Possibilities, and it says there are 148 possibilities:

That's great.  You go back to Crazy Space Artichokes and resume your game, but only for a few seconds.  You shoot a space artichoke and your score increases to 550.  You pause the game again, and return to Cheat II.  You change the number in the Search For box to 550, which is what your score currently is.  Again, you hit the Search button.  Now, the Possibilities number is 1.  Perfect!  The cloudy sky in the corner changes to a clumsily-drawn sun.  You're now free to change the score to whatever value you desire.  You type 10000 into the New Value box,

and hit the Change button.

You go back to Crazy Space Artichokes, and your score is 10000!

(If the possibilities number didn't turn to one, you repeat the process until it does.  If it doesn't, see the section below on what to do.)

That is the foundation of Cheat II.  However, Cheat II is a powerful and flexible program, and there are many feature that can make things even more fun.

After using Cheat to change the score in Crazy Space Artichokes, you decide that you want to be able to change the score at will, without having to go through the search process.  Easy!  You go to the Title box and type in "Score."

Then, you'll notice that there's another window in the Cheat II application, called "Cheat Sheet."  You hit the Add button, and select that window.  There should now be an item in the left list called "Crazy Space Artichokes".  If you hit it, "Score" will come up in the right list. The cheat is now permanently saved. To recall this cheat at a later date, you select "Crazy Space Artichokes" and then  "Score," and either hit the Open button or double click on the name.

Games Without Menus

Some games, mostly action/arcade games, don't have a nice healthy Macintosh interface, and you can't cheat in the same way we cheated in Crazy Space Artichokes.  However, all is not lost!  Let's say you wish to cheat in everybody's second-favorite game, Banana Deterioration Simulator (BDS), which doesn't use menus and doesn't let you switch to other applications while it's running.  Load up Cheat II.  In the bottom left there's a choice between Selecting and Interrupt/keys.  Choose Interrupt/keys.  Now, load up BDS and start playing.  Hit Control-Option-Command(Open Apple)-I(i), and a window will appear.  This window is a command-line interface for Cheat II.  It unfortunately looks rather like something from one of those other types of computers, but it's the best I can do from within another program.  Once in this environment, everything works just about the same way as from within Cheat II itself.  You just use your keyboard more.  There is online help which explains all the commands.  After you've done your first search, you type QUIT (or hit the mouse button) and you will be returned to Banana Deterioration Simulator.  To enter Cheat II's interruptor, just hit those four keys again.

*NOTE* The interruptor contains a lot of 68000 assembly hacking, and it might crash your PowerMac.  I don't see myself fixing this soon.  Buy me a PowerMac and I'll fix it.

Technical Note: The occasional game will not give Cheat II a chance to interrupt it, as it will not be calling GetKeys, Button or SystemTask.  These games are usually event-driven without windows or read the keyboard through low-memory globals, and are also quite rare.  I will be dealing with this to an extent eventually.

How to Decide Sizes

There are three choices for the search size: longint, integer, and byte.  I realize that those names mean nothing to most people.  It's quite simple, though.  These names relate to the size of the number you're searching for in memory, how many bits are used to store it.
Longint -- 32 bits -- the number can grow bigger than 32000 or so.  This is usually used for things like points.
Integer -- 16 bits -- the number can grow between 255 and 32000 (or at most 65000).  This is usually used for things like lives, level, etc.
Byte -- 8 bits -- the number is always less than 255.  Now, in theory this could be used for level and lives etc, but in reality it virtually never is, due to the way memory is stored.  I don't think I've ever had to use byte size, but I've included it for completeness.
If you're not sure whether to use Longint or Integer, you can always try Longint, and if the number in the game goes negative or is different from what you meant to change it to (or if your machine crashes ;-j) then you know it shoulDPeger.

Shortcut Keys

Whenever you have found a cheat (either by the Cheat Application or the interrupter), you can assign a shortcut key to it. To do this press the "Change Key" button (or in the interrupter, type "key" and hit return), and type the key you want to assign to the cheat. Then save the cheat (see below).
Now, whenever you want to make the cheat, just load up the Cheat Application, press the "interrupt/keys" button, load your game, and press the key combination (Command + Option + Control + the key you assigned to the cheat). The cheat will be performed.
Some notes on shortcut keys:
You probably won't see the cheat since the game must update the screen before it's shown. It still is performed, though.
There's a small chance that the keys won't work. (See the technical note in the "Games Without Menus" section.)
If two cheats within the same application have been assigned the same key, both will be performed.
The name of the game in the cheat application must be EXACTLY the same as its real name, or the cheats won't load in. (See below for instructions on changing the name of a game.)

Some Trix with Examples

Sometimes games don't store the exact number you see on screen, often leaving out trailing zeroes.  For example, SimTower leaves off two zeroes in your money, and Diamonds leaves off one zero in your points.

Cheat II does work on Marathon, but not quite straightforwardly.  Marathon does some rather private and kinky things with the graphics environment that unfortunately cause Cheat II to crash if you hit the interrupt keys as you would in any other game.  However, it temporarily fixes up the graphics environment when it puts up the 'Are you sure you want to Quit?' alert when you hit Command-Q.  Therefore, to cheat in Marathon and any other games like this, you have to get this Alert box to appear, then hold down Control-Option-OpenApple-I, and click on the Cancel button.  This will pop you into Cheat's Interruptor, and you're free to change whatever.

Please remember that trix are for kids.

What to Do When It Won't Narrow Down

Sometimes no matter how many times you change the number in the game you're looking for and search for it, you always have 2 possibilities for the location.  In these circumstances, it's pretty safe to change both of them.  Usually I find that one of them is a temporary variable or something that was used to perhaps draw your score or whatever, and changing it will have no effect.  I believe Spaceward Ho! has some things like this.

(To change two places, hit Change then Search then Change right in a row.)

The Cheat Sheet

The cheat sheet is a way for you to remember cheats that you've found, and easily recall them at a later date, whether you're working through the Cheat Application's interface or the interruptor.

To add a cheat that you've found to your cheat sheet, simply hit the "Add" button.  If you want to remove old cheats, select one or more cheat and hit the "Remove" button.  Cheat II saves the information about the cheat to the actual Cheat II application, so you will see it grow in size by a little bit.  (It saves the title, the comment, the offset, the new value, the search size, and the key.)

If you want to recall one of your cheats (or someone else's), first select the target game in the left list on the sheet.  Then, either click on the cheat you wish to open and hit the "Open" button, or just double-click on the cheat.

Cheat II provides a simple mechanism for importing and exporting cheats.  The idea is that this will facilitate simple trading of cheats over email, newsgroups, or whatever.  (And it provides a means for hackers to artificially set the offset.)  To export a cheat, click on it and hit the "Export to New" button.  Cheat II will prompt you for a new file name, and it will save a text version of your cheat.  "Append…" will append a text version of your cheat to an existing file.

To import cheats and convert them from a text format to a cheat for your cheat sheet, hit the "Import" button.  It will convert all the cheats it finds in the file you select.  Cheat II does not care about duplicate titles. If you import cheats that have been exported with a previous version of Cheat II, or by selecting the cheats in the cheat list, they will be imported to the currently selected game.

Changing the Name of a Game

If you want to change the name of a game in the game list, just double-click on it. That will bring up a dialog box with a text-edit box, a list of the currently open applications, and a "Look Up…" button. Now you can type in the new name of the application, click at an item in the list, or press the "Look Up…" button to get the new name.
If you press an item in the list, that item will be copied to the edit box.
If you press the "Look Up…" button, you will be presented with a standard file dialog in which you can look up the game and press the open button to copy the name of that game to the edit box.

Hiding Applications

If you notice that the application list in the cheat list starts to get very long (or for any other reason), you can hide applications on that list by selecting them and pressing the "Hide app" button. It will then be deleted from the list until you press the "Show all" button.
You'll never be able to use the interrupter or shortcut keys in a hidden application.
Note:
It may take up to a second before the application dissappears from the list. This is because it isn't removed until the next time the cheat application updates the list.

The Theory Behind Cheat

We know that the target game is keeping values somewhere in memory, but before we can change them we need to find out where they are.  We can't ask it, so we need to be more subtle.  The user types in the target value and Cheat II searches through that game's memory to find all the possible locations for that value.  There are usually quite a few.  Then, the user changes the value in the game to anything else.  When they return to Cheat II and do a search on the new value, there is most likely to be only one possible position for that value in memory, (or if there is more than one possible position, they are usually somehow linked internally.)  (The search can take a couple extra refinements if you're using bytes or starting with zero or other such things.)  Anyway, most likely this simple process finds the exact location in memory and one can change it at will.

Technical Stuff

In the main window is a number labeled "Offset."  This indicates the offset from the end of the application's memory.  If the values that one searches for are implemented in the game as global variables, they are likely to have a static offset every time that game is loaded up, on every computer.  When this is the case, the offsets tend to be small -- less than 65K, I guess.  When the offset is bigger, it is likely that it resides within dynamically allocated memory, and it will likely change location between runs of an application or even while the application is running (crash city!)

Source code is freely available on the web page.  It's in THINK C 6.0, which is one of the reasons I'm not really doing any more work on it.  Unfortunately, MW blows chunks in terms of assembly handling, so it can't be converted easily.  I hope more people work on Cheat.

Shareware Deal

Cheat II is officially $5 shareware.  People under 18 and over 65 are exempt.  People outside of U.S. can just send me a postcard.

Correspondence

e-mail (for bug reports, enhancement requests, and questions):

miller@minerva.cis.yale.edu

snail mail for shareware fee payments (do not expect a response):

Adam Miller
Box 201156
New Haven, CT 06520-1156

after may 1996:

Adam Miller
105 Cornell St.
Ithaca, NY 14850

Thanks To the Following People

Jim Wintermyre
Terry Douglas
Fletcher Thompson Penney
Peter V.G
Dave Earl
Martin Leach
Robert A. Uhl
Bjorgvin Runar Leifsson
Adrian Diaconu
Matt Christian
Delta Tao and everyone else